package com.geek.javase.ch03.test5;

/*
 *@author wangpeng
 *2025/10/12 22:16
 *@description TODO
 */

/**
 * 1、定义一个英雄类Hero，可以通过这个类创建英雄角色
 * 属性：
 *     游戏角色拥有昵称name，等级level，血量blood，攻击力power，防御力defence，种族kind，
 * 装备Equip（只能装3个装备，初始没有装备）。
 * 方法：
 *     游戏角色拥有基本攻击方法（拥有一定几率打出暴击）attack(Monster m)，死亡判定方法isDead()，添加装备的方法addEquip(Equip e)，获取角色信息的方法show()。
 *
 */

public class Hero extends Role{
    int index = 0;  //英雄携带装备的数量
    //英雄可以添加装备 关联 一对多 一个英雄最多三件装备
    private Equipment[] equip = new Equipment[3];

    //方法
    //基本攻击方法（拥有一定几率打出暴击)
    @Override
    public void attack(Role m){
        int block = 0;  //暴击
        //用随机函数生成一个1~100之间的整数，整数大于80就暴击
        int num =(int) (Math.random() * 100 + 1);
        if (num >=80){
            //产生暴击
            block = num * 2;
        }

        //怪兽的失血量 = (英雄的攻击力 + 暴击) - 怪兽的防御力
        int blood = (this.getPower() + block) - m.getDefence();  //造成的伤害
        if (blood > 0){
            //攻击有效，设置怪兽的剩余血量 ,输出战况

            m.setBlood(m.getBlood() - blood);
            System.out.println(m.getName() + "在此回合失学量为" + blood + "，剩余血量为：" + m.getBlood());
        }else{
            System.out.println("此回合攻击无效");
        }
    }

    //添加装备  英雄的属性= 英雄自带的属性+装备的属性
    //装备 最多只能带三个
    public void addEquip(Equipment e){
        if (index >= equip.length){ //index 应该再该对象创建时创建,所以定义再前面
            System.out.println("英雄的装备满了，不能再携带装备了");
        }else {
            //添加装备
            this.equip[index++] = e;

            //因为英雄添加了装备，所以这里要合并属性
            //合并攻击力
            this.setPower(getPower() + e.getPower());
            //合并防御力
            this.setDefence(getDefence() + e.getDefence());
        }

    }

    //获取角色信息的方法
    public void show(){
        super.show();
        //获取装备
        for (int i = 0; i < index; i++) {
            this.equip[i].show();
        }
    }

    //------------构造方法


    public Hero() {
    }

    public Hero(String name, String level, int blood, int power, int defence, String kind) {
        super(name, level, blood, power, defence, kind);
    }

    public Equipment[] getEquip() {
        return equip;
    }

    public void setEquip(Equipment[] equip) {
        this.equip = equip;
    }
}
